<?php

class ProductosController extends AppController {

    public $layout = 'administrator';
    public $filtros = array('Producto.nombre' => 'Nombre',
                            'Producto.categoria_id' => 'Categoría');
    public $head = array('Producto.nombre' => 'Nombre',
                         'Categoria.nombre' => 'Categoria',
                         'Producto.precio' => 'Precio');
    
    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('categoria', 'v');
    }

    public function index() {
        $this->Producto->recursive = 0;
        if ($this->request->is('post')) {
            $this->paginate = array(
                'conditions' => arrayFiltro($this->request->data)
            );
        }
        $this->set('filtros', $this->filtros());
        $this->set('filtros_activos', $this->filtrosActivos());
        $this->set('head', $this->head);
        $this->set('rows', $this->paginate());
    }

    public function view($id = null) {
        $this->Producto->id = $id;
        if (!$this->Producto->exists()) {
            throw new NotFoundException(__('Producto inexistente'));
        }
        $this->set('producto', $this->Producto->read(null, $id));
    }

    public function add() {
        if ($this->request->is('post')) {
            //acomodando los datos antes de guardar en la base de datos
            $this->request->data['Producto']['fecha_carga'] = date("Y-m-d H:i:s");

            if (empty($this->request->data['Producto']['imagen']['error'])) {
                $tmp_file = $this->request->data['Producto']['imagen']['tmp_name'];
                $file = pathinfo($this->request->data['Producto']['imagen']['name']);
                $destino = WWW_ROOT . "img/productos/" . $id . "." . $file['extension'];

                unset($this->request->data['Producto']['imagen']);
                $this->request->data['Producto']['img_ext'] = $file['extension'];

                if (!move_uploaded_file($tmp_file, $destino)) {
                    $this->Session->setFlash(__('La categoría no pudo ser editada'));
                }
            }

            $this->Producto->create();
            if ($this->Producto->save($this->request->data)) {
                $this->Session->setFlash(__('La categoría ha sido ingresada correctamente'));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('La categoría no pudo ser ingresada'));
            }
        }
        $this->set('categorias', $this->Producto->Categoria->find('list'));
    }

    public function edit($id = null) {
        $this->Producto->id = $id;
        if (!$this->Producto->exists()) {
            throw new NotFoundException(__('Producto inexistente'));
        }
        if ($this->request->is('post') || $this->request->is('put')) {
            //acomodando los datos antes de guardar en la base de datos
            $this->request->data['Producto']['fecha_modificacion'] = date("Y-m-d H:i:s");

            if (empty($this->request->data['Producto']['imagen']['error'])) {
                $tmp_file = $this->request->data['Producto']['imagen']['tmp_name'];
                $file = pathinfo($this->request->data['Producto']['imagen']['name']);
                $destino = WWW_ROOT . "img/productos/" . $id . "." . $file['extension'];

                unset($this->request->data['Producto']['imagen']);
                $this->request->data['Producto']['img_ext'] = $file['extension'];
                
                if (!move_uploaded_file($tmp_file, $destino)) {
                    $this->Session->setFlash(__('La categoría no pudo ser editada'));
                }
            }

            if ($this->Producto->save($this->request->data)) {
                $this->Session->setFlash(__('La categoría ha sido editada correctamente'));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('La categoría no pudo ser editada'));
            }
        } else {
            $this->set('categorias', $this->Producto->Categoria->find('list'));
            $this->request->data = $this->Producto->read();
        }
    }

    public function delete($id = null) {
        if (!$this->request->is('post')) {
            throw new MethodNotAllowedException();
        }
        $this->Producto->id = $id;
        if (!$this->Producto->exists()) {
            throw new NotFoundException(__('Producto inexistente'));
        }
        if ($this->Producto->delete()) {
            $this->Session->setFlash(__('Producto eliminada correctamente'));
            $this->redirect(array('action' => 'index'));
        }
        $this->Session->setFlash(__('La categoría no pudo ser eliminada'));
        $this->redirect(array('action' => 'index'));
    }
    
    public function categoria($id = null) {
        $this->layout = 'ajax';
        
        $this->Producto->Categoria->id = $id;
        if (!$this->Producto->Categoria->exists()) {
            throw new NotFoundException(__('Categoría inexistente'));
        }
        
        $this->set('productos', $this->Producto->find('all', array('conditions' => array('Producto.categoria_id' => $id), 'order' => 'Producto.nombre ASC')));
    }
    
    public function v($id = null) {       
        $this->layout = 'default';
        
        $this->Producto->id = $id;
        if (!$this->Producto->exists()) {
            throw new NotFoundException(__('Producto inexistente'));
        }
        
        $this->set('categorias', $this->Producto->Categoria->find('all', array('order' => array('Categoria.orden ASC'))));
        $this->set('producto', $this->Producto->find('all', array('conditions' => array('Producto.id' => $id))));
    }

}